package com.zoweunion.mechanic.service.base;

import java.util.List;
import java.util.Map;

import com.alipay.api.AlipayApiException;
import com.github.pagehelper.PageInfo;
import com.zoweunion.mechanic.model.User;
import com.zoweunion.mechanic.model.WxUserInfo;
import com.zoweunion.mechanic.util.MyException;
import org.apache.ibatis.annotations.Param;

public interface UserService {
	
	/**
	 * 根据username查询用户名 密码
	 */
	public User getUserByAccount(String user_account);

	/**
	 * 根据username查询用户名 密码
	 */
	Map<String, Object> getUserById(String id);

	/**
	 * 添加用户修改密码的历史记录
	 */
	void recordUserPassword(Map<String, Object> reqObj);

	/**
	 * 根据username查询用户具体信息
	 */
	public Map<String, Object> getUserInfoByAccount(String user_account);

	/**
	 * 根据userId查询用户具体信息
	 */
	Map<String, Object> getUserInfoById(String userId);


	/**
	 * 根据用户名查询用户数量
	 */
	public int checkExistForUser(Object object);


	/**
	 * 注册用户
	 */
	public String doRegister(Map<String, Object> reqObj);


	/**
	 * 修改用户
	 * @param userInfo
	 */
	public void update(Map<String, Object> userInfo);


	/**
	 * 根据user_account查询用户相应的权限
	 * @param account
	 * @return
	 */
	public List<String> getPermissionsByAccount(String account);
	

	/**
	 * 根据服务商id和角色id集合 查询用户列表带分页
	 * @param reqMap
	 * @return
	 */
	public Map<String, Object> getAllUserByPage(Map<String, Object> reqMap);
	
	/**
	 * 根据服务商id和角色id集合 查询用户列表
	 * @param reqMap
	 * @return
	 */
	public List<Map<String, Object>> getUser(Map<String, Object> reqMap);


	public List<Map<String, Object>> getUserWithAuth();


	public Map<String, Object> getAuthInfo(String user_account);

	/**
	 * 根据openid获取用户详细信息
	 * @param openid
	 * @return
	 */
	WxUserInfo getWxUserInfoByOpenid(@Param("openid") String openid);
	/**
	 * 保存信息
	 * @param wxUserInfo
	 * @return
	 */
	boolean saveWxUserInfo(WxUserInfo wxUserInfo);

	/**
	 * 通过openid逻辑删除数据
	 * @param openid
	 * @return
	 */
	boolean logicDeleteByOpenid(String openid);

	/**
	 * 通过id逻辑删除数据
	 * @param id
	 * @return
	 */
	boolean logicDeleteById(String id);

	/**
	 * 解绑用户的微信或者支付宝
	 * @param user
	 * @param type
	 * @return
	 */
	boolean unbindWx(User user, Integer type) throws MyException;

	/**
	 * 绑定用户的微信或者支付宝
	 * @param user
	 * @param type
	 * @return
	 */
	boolean bindWx(User user, Integer type, String authCode) throws MyException, AlipayApiException;
	/**
	 * 绑定用户的微信或者支付宝
	 * @param user
	 * @param type
	 * @param openid
	 * @return
	 */
	boolean bindWxWrap(User user, Integer type, String openid);
	/**
	 * 我的绑定
	 * @param userMap
	 * @return
	 */
	Map<String, Object> myBindWx(Map<String, Object> userMap);

	/**
	 * 我的绑定
	 * @param user
	 * @return
	 */
	Map<String, Object> myBindWx(User user);

	/**
	 * 当再wxuserin表中查不到时，插入数据
	 * @param wxUserInfo
	 * @return
	 */
	boolean saveNotFoundWx(WxUserInfo wxUserInfo);

	/**
	 * 修改密码
	 * @param reqMap
	 */
	void updatePassWord(Map reqMap);

	/**
	 * 根据主机厂的id和省市的number查询服务商列表(主机厂下面的子服务商);type表示树状的层级(0:第一层(大区);1:第二层(省份);2:第三层(城市))
	 * @param paraMap
	 * @return
	 */
	PageInfo<Map<String, Object>> getServerByArea(Map<String, Object> paraMap);

	/**
	 * 注销账号
	 * @param reqMap
	 */
	boolean logout(Map reqMap);

	PageInfo getExamineUserList(Map<String, Object> paramsMap);

	void approveExamineUser(Map<String, Object> paramsMap);

	void refuseExamineUser(Map<String, Object> paramsMap);
}
